package net.realsee.service.wcs.rcs.hik;

import net.realsee.domain.wcs.rcs.hik.*;

/**
 * 海康RCS接口服务
 *
 * @author 孙正华
 * @since 2023/8/22 15:23
 */
public interface IHikService {

    /**
     * 生成任务单
     * <p>
     * 上层系统平台发送调度请求, RCS 通过请求参数, 生成调度 AGV 任务单。
     * 生成所有车型的搬运任务。
     * </p>
     */
    HikRcsOperateResult genAgvSchedulingTask(HikGenAgvSchedulingTaskReq request);

    /**
     * 继续执行任务
     * <p>
     * 上层系统平台发送继续调度请求，RCS-2000 获取 AGV 下一个动作，继续执行。
     * </p>
     */
    HikRcsOperateResult continueTask(HikContinueTaskReq request);

    /**
     * 取消任务
     * <p>
     * 通过正在执行的任务编号,取消该任务,不再执行，AGV 如果背着货架, 取消类型为 0 时，会把货
     * 架直接放在路上, AGV 为空闲状态，需要人工介入发指令搬走或拖走货架； 取消类型为 1 时，
     * 称为软取消， AGV 仍然背着货架，通过货架所属库区或回库区域执行回库指令，如果回库区
     * 域没有位置，返回错误信息，取消不成功。CTU 取到料箱后取消，取消类型为 0 时，会把料箱
     * 留在 CTU 上，需要人工取走；取消类型为 1 时，CTU 将料箱搬回指定的区域的空仓位，若区
     * 域没位置，返回错误信息，取消不成功。CTU 只能软取消回库区，支持双伸位场景，不支持软
     * 取消回输送线等工作位。
     * </p>
     * <p>
     * 叉车、辊筒车不支持软取消
     * </p>
     */
    HikRcsOperateResult cancelTask(HikCancelTaskReq request);

    /**
     * 设置任务优先级
     * <p>
     * 设置任务优先级(1~127 级),值越大,优先级越高。
     * 优先级生效仅在系统中 AGV 数量不足，存在多个优先级不同的任务时候，会按照优先级的先后
     * 顺序分配 AGV 执行。
     * 如果设置优先级失败，则全部失败。
     */
    HikRcsOperateResult setTaskPriority(HikTaskPrioritySetReq request);

    /**
     * 任务执行回调
     */
    HikRcsOperateResult callback(HikRcsAgvCallback param);

    /**
     * 告警推送
     */
    HikRcsOperateResult warnCallback(HikWarnReq param);
}
